package user_api

import (
	"fastgin/global"
	"fastgin/middleware"
	"fastgin/models"
	"fastgin/utils/res"
	"fmt"

	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
	"gorm.io/gorm"
)

// 修改指定用户的普通角色为管理员角色
func (UserApi) UpdateRoleView(c *gin.Context) {
	cl := middleware.GetAuth(c)
	if cl.Claims.RoleID == 1 {
		crs := middleware.GetBind[models.IDList](c)

		// 查询要更新的用户列表
		var userList []models.UserModel
		count := global.DB.Find(&userList, crs.IDList).RowsAffected
		if count == 0 {
			logrus.Errorf("不存在的用户")
			res.FailWithMsg("不存在的用户", c)
			return
		}

		// 检查是否有修改自己的角色
		for _, user := range userList {
			if user.ID == cl.Claims.UserID {
				logrus.Errorf("管理员不能修改自己的角色")
				res.FailWithMsg("管理员不能修改自己的角色", c)
				return
			}
		}
		err := global.DB.Transaction(func(tx *gorm.DB) error {
			// 更新用户角色
			for _, user := range userList {
				// 假设你想将角色更新为管理员（RoleID = 1）
				if err := global.DB.Model(&user).Update("role_id", 1).Error; err != nil {
					logrus.Errorf("更新用户 %d 角色失败: %v", user.ID, err)
					res.FailWithMsg(fmt.Sprintf("更新用户 %d 角色失败", user.ID), c)
					return err
				}
			}
			return nil
		})
		if err != nil {
			// 如果事务失败，已经在事务内处理了错误，直接返回
			return
		}
		// 记录成功日志并返回成功信息
		logrus.Infof("用户角色更新成功")
		res.OkWithMsg("用户角色更新成功", c)
		return
	}
	// 如果当前用户不是管理员，返回错误
	logrus.Errorf("没有权限进行该操作")
	res.FailWithMsg("没有权限进行该操作", c)
}
